/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Informes;

import Entidades.Empleado;
import Entidades.EstadoLicencia;
import Entidades.Licencia;
import Entidades.Oficina;
import Expertos.ConvertirFechas;
import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 *
 * @author diego
 */
public class InformeLicenciaOficina {

    public InformeLicenciaOficina() {
    }

    public void imprimir(Date fechadesde, Date fechahasta, String nombreArchivo, Oficina oficina) {
        Document documento = new Document();
        FileOutputStream ficheroPdf;
        String archivo = nombreArchivo;
        String cabecera, estado = null;
        Date fechaSistema = new Date();
        Date fechaBD;
        int fd = 0;
        int fh = 0;
        int totalempleados = 0;
        String nombreoficina = "       Oficina: " + oficina.getNombreOficina() + "   N° " + oficina.getNumeroOficina();

        cabecera = "_____________________________________________________________________________" + "\n"
                + "\n"
                + "\n"
                + "                                            INFORME DE LICENCIAS " + "\n"
                + "\n"
                + "\n"
                + "______________________________________________________________________________" + "\n"
                + "\n Periodo: " + ConvertirFechas.fechaAString(fechadesde) + "   " + ConvertirFechas.fechaAString(fechahasta);
        try {
            ficheroPdf = new FileOutputStream(archivo);
            PdfWriter.getInstance(
                    documento,
                    ficheroPdf).setInitialLeading(20);
        } catch (Exception ex) {
            System.out.println(ex.toString());
        }
        try {
            documento.open();
            documento.add(new Paragraph(ConvertirFechas.fechaAString(fechaSistema) + "     REGISTRO DEL ESTADO CIVIL Y CAPACIDAD DE LAS PERSONAS"));
            documento.add(new Paragraph(cabecera));
            documento.add(new Paragraph("\n"));
            Paragraph parrafo2 = new Paragraph(nombreoficina);
            parrafo2.setAlignment(1);//el 1 es para centrar
            documento.add(parrafo2);
            documento.add(new Paragraph("\n"));
            documento.add(new Paragraph("\n"));
            PdfPTable tabla = new PdfPTable(8);
            //el numero indica la cantidad de Columnas//
            tabla.addCell("Empl.");
            tabla.addCell("Leg.");
            tabla.addCell("N° Lic.");
            tabla.addCell("Inicio");
            tabla.addCell("Fin");
            tabla.addCell("Restan");
            tabla.addCell("Tipo");
            tabla.addCell("Estado");
            Calendar cali = Calendar.getInstance();
            Calendar calo = Calendar.getInstance();
            cali.setTime(fechadesde);
            calo.setTime(fechahasta);
            List<Empleado> listaempleados = (List<Empleado>) oficina.getEmpleadoCollection();
            for (Empleado empleado : listaempleados) {
                if (empleado.getVigente()) {
                    List<Licencia> lic = (List<Licencia>) empleado.getLicenciaLista();
                    if(lic != null){
                        totalempleados++;
                    }
                    for (Licencia licencia : lic) {
                        fechaBD = licencia.getFechaInicioLicencia();
                        fd = fechadesde.compareTo(fechaBD);
                        fh = fechahasta.compareTo(fechaBD);
                        if (fd >= 0 || fh >= 0) {
                            tabla.addCell(empleado.getApellido());
                            tabla.addCell(empleado.getLegajoEmpleado().toString());
                            tabla.addCell(Integer.toString(licencia.getNumeroLicencia()));
                            tabla.addCell(ConvertirFechas.fechaAString(licencia.getFechaInicioLicencia()));
                            tabla.addCell(ConvertirFechas.fechaAString(licencia.getFechaFinLicencia()));
                            List<EstadoLicencia> el = (List<EstadoLicencia>) licencia.getEstadoLicenciaCollection();
                            for (int i = 0; i < el.size(); i++) {
                                estado = el.get(i).getNombreEstado();
                            }
                            if(estado == null || estado.equals("Finalizada") || estado.equalsIgnoreCase("Rechazada")){
                                tabla.addCell("");
                            }
                            else {
                            tabla.addCell(Integer.toString(ConvertirFechas.diferenciaEnDias2(licencia.getFechaFinLicencia(), licencia.getFechaInicioLicencia())));
                            }
                            tabla.addCell(licencia.getIdtipoLicencia().getDescripcion());
                            tabla.addCell(estado);
                        }
                        cali.setTime(fechadesde);
                        cali.add(Calendar.DATE, 1);
                        fechadesde = cali.getTime();
                    }
                }
            }
            documento.add(tabla);
            documento.add(new Paragraph("Total de empleados: " + totalempleados));
            documento.add(new Paragraph("______________________________________________________________________________"));
            documento.close();
        } catch (Exception ex) {
            System.out.println(ex.toString());
        }
    }
}